package com.my.study.pool.mypool;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.TimeUnit;

/**
 * @author Carlos
 * @version 1.0
 * @Description 测试自定义线程池
 * @date 2021/6/11 8:20
 **/
@Slf4j(topic = "c.TestThreadPool")
public class TestThreadPool {

    public static void main(String[] args) {
        ThreadPool threadPool = new ThreadPool(1, 1000, TimeUnit.MILLISECONDS, 1, ((task, workQueue) -> {
            // 1、死等
            //workQueue.put(task);
            // 2、带超时等待
            workQueue.offer(task, 5000, TimeUnit.MICROSECONDS);
            // 3、让调用者放弃任务执行
            // 什么也不做
            // 4、让调用者抛出异常
//            throw new RuntimeException("队列已满，执行丢弃策略");
            // 5、让调用者自己执行任务
//            ((Runnable) task).run();
        }));

        for (int i = 0; i < 3; i++) {
            int j = i;
            threadPool.execute(() -> {
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                log.debug("{}", j);
            });
        }
    }


}
